In modern computing systems, multiple processes and/or threads may want to access a shared set of computing resources and/or data resources. For example, distributed (e.g., cloud-based) computing systems can facilitate concurrent access to certain shared data files and/or shared databases and/or shared database tables by managing access requests by various processes that are invoked by applications or collaborating users. The operations pertaining to such access requests can vary. Some read-centric operations, such as a data item read or file view, might merely read the resource without modifying the resource. Other processes, such as a data write or file delete, might modify the resource.
In all cases, any processes that might be executed concurrently while using a given resource are expected to cooperate in their respective read/write operations so as to produce consistent results. A computing system can facilitate such resource access concurrency using various locking techniques. Such locking techniques can serve to prevent destructive interactions with a given resource that, for example, might incorrectly update and/or alter the resource between a series of accesses to the resource. Some locking techniques implement an atomic operation, such as a test-and-set or compare-and-swap (CAS) operation, to manage access to shared resources.
Unfortunately, legacy techniques for managing access to shared resources can present limitations, at least in their ability to facilitate low latency resource access for read-only processes. Specifically, in some legacy approaches, a reading process might perform a CAS or other atomic operation as part of the locking technique to gain access to the shared resource. When a large number of read processes are contending for a shared resource, only one succeeds and the remaining processes repeat the CAS operation so as to (eventually) gain access to the resource. In many cases, the CAS operations might be initiated from processes on different computing nodes, or even from processes on nodes in different computing clusters. Performing a CAS or other atomic operation can be expensive, at least as pertaining to the number of processor cycles required to execute the compare-and-swap. Moreover, when a given process performs many failed CAS operations before a successful CAS operation to gain access to the resource, the latency for acquiring the resource increases, which in turn can decrease the overall performance (e.g., throughput) of the computing system.
What is needed is a technique or techniques to improve over legacy and/or over other considered approaches. Some of the approaches described in this background section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.